// package database

// import (
// 	"context"
// 	"encoding/json"
// 	"fmt"
// 	"gameServer/gamesession"
// 	"gameServer/log"
// 	"time"
// )

// /*
// Redis会话存储接口和实现
// */

// // 会话存储接口
// type SessionStore interface {
// 	// 保存会话到数据库
// 	SaveSession(session gamesession.GameSession) error
// 	// 从数据库加载会话
// 	LoadSession(sessionId string) (gamesession.GameSession, error)
// 	// 从数据库删除会话
// 	DeleteSession(sessionId string) error
// 	// 获取所有会话ID
// 	GetActiveSessions() ([]string, error)
// 	// 关闭数据库连接
// 	Close() error
// }

// // 会话存储实现
// type RedisSessionStore struct {
// 	client *RedisDatabase  // 使用数据库模块的RedisDatabase
// 	prefix string          // 会话键前缀
// 	ctx    context.Context // 上下文
// }

// // 会话数据序列化结构
// type RedisSessionData struct {
// 	SessionID string                    `json:"session_id"`
// 	State     gamesession.SessionState  `json:"state"`
// 	Players   []string                  `json:"player"`
// 	CreateAt  time.Time                 `json:"create_at"`
// 	StartAt   *time.Time                `json:"start_at"`
// 	Config    gamesession.SessionConfig `json:"config"`
// }

// // 创建Redis会话存储实例
// // 创建Redis会话存储实例
// // prefix: 会话键前缀
// func NewRedisSessionStore(prefix string) (*RedisSessionStore, error) {
// 	// 从全局管理器获取Redis数据库实例
// 	db, err := GetDatabase("redis")
// 	if err != nil {
// 		return nil, fmt.Errorf("Get redis database failed: %v", err)
// 	}

// 	// 类型断言为RedisDatabase
// 	redisDB, ok := db.(*RedisDatabase)
// 	if !ok {
// 		return nil, fmt.Errorf("Get redis database failed: not redis database")
// 	}

// 	// 验证连接状态

// 	if err := redisDB.Ping(); err != nil {
// 		return nil, fmt.Errorf("Get redis database failed: %v", err)
// 	}
// 	return &RedisSessionStore{
// 		client: redisDB, // 使用管理器提供的RedisDatabase实例
// 		prefix: prefix,  // 保留前缀功能
// 		ctx:    context.Background(),
// 	}, nil
// }

// // 保存会话到Redis
// func (s *RedisSessionStore) SaveSession(session gamesession.GameSession) error {
// 	sessionData := RedisSessionData{
// 		SessionID: session.ID(),
// 		State:     session.State(),
// 		Players:   session.GetPlayers(),
// 		CreateAt:  session.CreateAt(),
// 		Config:    session.GetConfig(),
// 	}
// 	if startAt := session.StartAt(); startAt != nil {
// 		sessionData.StartAt = startAt
// 	}
// 	data, err := json.Marshal(sessionData)
// 	if err != nil {
// 		return err
// 	}
// 	key := s.getSessionKey(session.ID())
// 	// 保存会话数据，设置过期时间
// 	_, err = s.client.SAdd(s.ctx, key, session.ID())
// 	if err != nil {
// 		return err
// 	}
// 	log.Infof("Session saved to Redis: %s", session.ID())
// 	return nil
// }
// // 加载会话
// func(s *RedisSessionStore)LoadSession(sessionID string) (gamesession.GameSession,error){
// 	key := s.getSessionKey(sessionID)
// 	data,err := s.client.Get(key)
// }
// func (s *RedisSessionStore) getSessionKey(sessionId string) string {
// 	return s.prefix + ":sessions:" + sessionId
// }
// func (s *RedisSessionStore) getActiveSessionsKey() string {
// 	return s.prefix + ":active_sessions"
// }
package database